#pragma once
#include "../comm/Log.h"
#include "../comm/util.h"
#include "../comm/msg.pb.h"
#include <unordered_map>
#include <vector>
#include <functional>
#include <memory>
#include <mutex>

namespace ns_consume
{
    using namespace ns_log;
    using namespace ns_util;
    using namespace ns_proto;

    using ConsumerCallback = function<void(
        const std::string &, const ns_proto::Attributes *, const std::string &)>;
        
    // 消费者描述结构
    struct Consumer
    {
        using ptr = shared_ptr<Consumer>;

        string _qname;              // 订阅队列名称
        string _tag;                // 消费者标识
        bool _auto_ack;             // 自动应答标识
        ConsumerCallback _callback; // 消费者的消息回调函数

        Consumer() {}

        Consumer(const string &qname, const string &tag,
                 const bool &auto_ack, const ConsumerCallback &cb)
            : _tag(tag), _qname(qname), _auto_ack(auto_ack), _callback(cb) {}
    };

}